var User = function(){
    var this_ = this;
    this.init = function(url){
        url = url || app.currentUrl;
        if(this[url[1]])this[url[1]]();
        else this.list();
    }
    this.list = function(){
    	if(app.user_info.user_logined!=true){
            console.log('Только для зарегистрированных');
            app.static.registered_only();
            return;
        }
        app.topMenu.breadcrumbList[1] = ['Профиль пользователя','/user'];
        app.topMenu.breadcrumbList[2] = false;
        app.topMenu.buildBreadcrumb();
        app.leftMenu.setProfileLeftMenu();
        $.tmpl('profile',{}).prependTo(app.elements.general_content.html(''));
        mlhAPI.user.get({
            id: app.currentUrl[1] || app.user_info.user_id,
            requestType: app.currentUrl[1] ? "get" : 'get_nc',
            callback: function(info){
                console.log(info);
                app.main.unmask();
                if(info.result=='error'){
                    return;
                }
                info = info.data.info;
                info['you'] = info.user_id == app.user_info.user_id;
                var userContainer = $('#user_info');
        		$.tmpl('profile_info',info).appendTo(userContainer.html(''));
                /*for(var k in info.shops){
        			mlhAPI.get({
        	            c: 'shop',
        	            v: 'showByUser',
        	            name: info.shops[k].name
        	        },function(data){
        	            console.log(data);
        	            app.main.unmask();
        	            if(data.result=='error'){
        	            	return;
        	            }
        	            data.data.info['tags_count'] = data.data.info.tags.length;
                        data.data.info['edit'] = false;
        				var el = $.tmpl('manage_shop_element', data.data.info);
        				el.find('.tags .koma:last').hide();
        				el.appendTo(userContainer);
        				app.decorate.setEvents(el);
        	        });
                }*/
            }
        });
    },
    this.settings = function(){
        if(app.user_info.user_logined!=true){
            app.static.registered_only();
            return;
        }
        app.topMenu.eraseBreadcrumbList();
        app.topMenu.buildBreadcrumb();
        app.leftMenu.setProfileLeftMenu();
        $.tmpl( 'settings_form', {}).prependTo(app.elements.general_content.html(''));
        app.main.unmask();
        $('#settingsForm form').submit(function(){
            return false;
        });
    }
    this.edit = function(){
        
        app.topMenu.eraseBreadcrumbList();
        app.topMenu.buildBreadcrumb();
        if(app.user_info.user_logined==true){
            app.leftMenu.setProfileLeftMenu();
            mlhAPI.user.get({
                id: app.user_info.user_id,
                mode: 'edit',
                requestType: 'get_nc',
                callback: function(data){
                   console.log(data); 
                   data.data.info['user_logined'] = true;
                   buildEditForm(data.data.info);
                }});
        }else{
            app.leftMenu.setRegisterLeftMenu();
            buildEditForm({
                user_logined: false
            });
        };
    }
    var buildEditForm = function(data){
        $.tmpl( 'register_form', data).prependTo(app.elements.general_content.html(''));
        app.main.unmask();
        //создаём список стран
        var createCountrySelectList = function(){
            if(!app['countryList']) return;
            if(!app['countryListForAutocomplete']){
                app['countryListForAutocomplete'] = [];
                $(app['countryList']).each(function(){
                    app['countryListForAutocomplete'].push(this.title);
                });
            }
            //инициализируем автокомплит
            $('#registerForm input[name=country_name]').typeahead({
                source: app['countryListForAutocomplete']
            });
            console.log(app['countryListForAutocomplete']);
        }
        var updateCelectCityElement = function(){
            var parent = $('#registerForm input[name=city_name]').parent();
            $('#registerForm input[name=city_name]').remove();
            parent.prepend($('<input name="city_name" type="text" class="span3" placeholder="Начинайте вводить название города" />').typeahead({
                source: app['cityList']
            }));
        }
        var createCitySelectList = function(country){
            if(!country) {
                $('#registerForm input[name=city_name]').typeahead({
                    source: []
                });
                return;
            }
            app['cityList'] = [];
            mlhAPI.region.getCityList({
                country: country.region_id,
                callback: function(data){
                    if(data.data.result!='error'){
                        $(data.data).each(function(){
                            app['cityList'].push(this.title);
                        });
                        //инициализируем автокомплит для города
                    }
                    updateCelectCityElement();
                }
            });
        }
        //запрашиваем список стран
        if(!app['countryList']){
            mlhAPI.region.getCountryList(function(data){
                if(data.data.result!='error'){
                    app['countryList'] = data.data;
                    createCountrySelectList();
                }
            });
        } else {
            createCountrySelectList();
        }
        app.decorate.validateRule($('#registerForm input'),
            {
                rules:{
                    email: function(value,controlGroup){
                            if (!value.match(/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/)){
                                return 'Не корректный Email! Введите правильный адрес вашего электронного почтового ящика';
                            }
                            return false;
                        },
                    password: function(value,controlGroup){
                            if (value && value.length < 4){
                                return 'Слишком короткий пароль, его легко будет подобрать, придумайте более длинный пароль';
                            }
                            return false;
                        },
                    repassword: function(value,controlGroup){
                            if ($('#registerForm input[name=password]').val() && value!= $('#registerForm input[name=password]').val()){
                                return 'Пароли должны совпадать. Введите такой же пароль как вы только что указали';
                            }
                            return false;
                        },
                },
                endValid: function(error){
                    if(!error){
                        $('#registerForm .control-group').each(function(){
                            if($(this).hasClass('error')) error = true;
                            $(this).find('*[rel=req]').each(function(){
                                var value = $(this).val();
                                if(!value) error = true;
                            });
                        });
                    }
                    $('#registerForm button[type=submit]').attr('class', !error ? 'btn btn-success' : 'btn btn-warning');
                    if(!error){
                       $('#registerForm').find('.alert-info').show();
                       $('#registerForm').find('.alert[data-type=error]').hide();
                    }
                }
            });
        var newImage = false;
        app.decorate.imageForm($('#registerForm'), data.image, newImage);
        //когда пользователь выбрал страну
        $('#registerForm input[name=country_name]').blur(function(){
            if(!app['countryList'])return;
            var country = 0;
            var countryName = $(this).attr('value');
            $(app['countryList']).each(function(){
                if(this.title == countryName){
                    country = this;
                }
            });
            $('#registerForm input[name=country_id]').attr('value',country.region_id);
            createCitySelectList(country);
        });
        //когда пользователь выбрал город
        $('#registerForm input[name=city_name]').live('blur',function(){
            if(!app['cityList'])return;
            var cityId = 0;
            var cityName = $(this).attr('value');
            $(app['cityList']).each(function(){
                if(this.title == cityName){
                    cityId = this.region_id;
                }
            });
            $('#registerForm input[name=city_id]').attr('value',cityId);

        });
        
        $('#registerForm form').submit(function(){
            if($('#registerForm button[type=submit]').hasClass('btn-warning')){
                $('#registerForm').find('.alert[data-type=error]').addClass('alert-error').text("Заполните все поля формы").show();
                $('#registerForm').find('.alert-info').hide();
                $('#registerForm').find('*[rel=req]').each(function(){
                    var value = $(this).val();
                    if(!value) {
                        $(this).parents('.control-group:first')
                            .attr('class','row control-group warning span12 no_left_margin')
                            .find('.alert:first').text('Это поле обязательно надо заполнить').show();
                        
                    }
                });
                return false;
            }
            var formData = {}
            var sData = $(this).serializeArray();
            for(var i = 0; i < sData.length; i++) {
                formData[sData[i].name] = sData[i].value;
            }
            formData['c'] = 'user';
            formData['newImage'] = newImage ? 1 : 0;
            if(app.user_info.user_logined){
                formData['v'] = 'save';
                formData['user_id'] = app.user_info.user_id;
            }else{
                formData['v'] = 'register';
            }
            formData['requestType'] = 'post';
            mlhAPI.post(formData,function(data){
                console.log(data);
                if(data.data.result=='error'){
                    var text = "При сохранении возникли ошибки";
                    for(var k in data.data.errors){
                        if(k=='email')$('#registerForm input[name=email]').parents('.control-group:first').attr('class','row control-group span12 error no_left_margin');
                        else {
                            var errorField = k.split('.');
                            errorField = errorField[errorField[1]? 1 : 0];
                            $('#registerForm input[name='+errorField+']').parents('.control-group:first').attr('class','row control-group span12 error no_left_margin').find('.alert-error:first').text(data.data.errors[k]).show();
                        }
                        //text += "<div>" + data.data.errors[k] +"</div>";
                    }
                    $('#registerForm').find('.alert[data-type=error]').addClass('alert-error').html(text).show();
                    $('#registerForm').find('.alert-info').hide();
                    $('#registerForm button[type=submit]').attr('class', 'btn btn-warning');
                }else{
                    $('#registerForm').find('.alert[data-type=error]').hide();
                    app.static.success({description:(app.user_info.user_logined ? 'Редактирование прошло успешно' : 'Вы успешно зарегистрировались')})
                    if(app.user_info.user_logined){
                        app.main.reloadUserInfo(function(){
                            app.go('#user');
                        });
                    }else{
                        mlhAPI.main.login({
                            email: formData.email,
                            password: formData.password,
                            callback: function(data){
                                if(data.data.result!='error'){
                                    location.href = '/#ask_register_shop';
                                    location.reload();
                                }
                            }
                        });
                    }
                }
            });
            return false;
        });
        $('#registerForm input[name=date]').datepicker({
            changeMonth: true,
            changeYear: true
        });
    }
}

app['user'] = new User();